// import com.alibaba.druid.sql.ast.SQLCommentHint;
// import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
// import com.alibaba.druid.sql.ast.statement.SQLLockTableStatement;
// import com.alibaba.druid.sql.dialect.h2.visitor.H2ASTVisitor;
// import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl;
// import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../MySqlObjectImpl.h"
#include "MySqlStatementImpl.h"
#include "../../../../ast/statement/SQLLockTableStatement.h"

class MySqlLockTableStatement_LockType
{
public:
  static MySqlLockTableStatement_LockType_ptr READ;
  static MySqlLockTableStatement_LockType_ptr READ_LOCAL;
  static MySqlLockTableStatement_LockType_ptr WRITE;
  static MySqlLockTableStatement_LockType_ptr LOW_PRIORITY_WRITE;

  string_ptr name;
  uint64_t mask;

  MySqlLockTableStatement_LockType(uint64_t mask, string_ptr name);
};

class MySqlLockTableStatement_Item : virtual public MySqlObjectImpl
{
public:
  SQLExprTableSource_ptr tableSource;

  MySqlLockTableStatement_LockType_ptr lockType;

  SQLCommentHint_list_ptr hints;
  MySqlLockTableStatement_Item();
  SHAREDOBJECT(MySqlLockTableStatement_Item);
  // @Override
  void accept0(MySqlASTVisitor_ptr visitor);

  SQLExprTableSource_ptr getTableSource();

  void setTableSource(SQLExprTableSource_ptr tableSource);

  MySqlLockTableStatement_LockType_ptr getLockType();

  void setLockType(MySqlLockTableStatement_LockType_ptr lockType);

  SQLCommentHint_list_ptr getHints();

  void setHints(SQLCommentHint_list_ptr hints);
};

class MySqlLockTableStatement : virtual public MySqlStatementImpl, virtual public SQLLockTableStatement
{
public:
  MySqlLockTableStatement_Item_list_ptr items;
  MySqlLockTableStatement();
  SHAREDOBJECT(MySqlLockTableStatement);
  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  // @Override
  void accept0(MySqlASTVisitor_ptr visitor);

  MySqlLockTableStatement_Item_list_ptr getItems();

  void setItems(MySqlLockTableStatement_Item_list_ptr items);
};
